/**
 * 障碍物管理器
 * 负责生成和管理游戏中的障碍物
 */
class ObstacleManager {
    constructor(game) {
        // 游戏实例引用
        this.game = game;
        
        // 障碍物容器
        this.obstaclesContainer = document.getElementById('obstacles-container');
        
        // 障碍物列表
        this.obstacles = [];
        
        // 障碍物类型
        this.obstacleTypes = ['trash', 'cone', 'hydrant'];
        
        // 上次生成障碍物的时间
        this.lastObstacleTime = 0;
        
        // 障碍物生成间隔（毫秒）
        this.obstacleInterval = 3000;
    }
    
    /**
     * 初始化障碍物管理器
     */
    init() {
        // 清空障碍物
        this.clearObstacles();
        
        // 重置时间
        this.lastObstacleTime = Date.now();
    }
    
    /**
     * 更新障碍物
     */
    update() {
        const now = Date.now();
        
        // 检查是否需要生成新障碍物
        if (now - this.lastObstacleTime > this.obstacleInterval) {
            this.generateObstacle();
            this.lastObstacleTime = now;
            
            // 根据游戏进度调整生成间隔
            this.obstacleInterval = Math.max(1500, 3000 - this.game.gameData.elapsedTime * 50);
        }
        
        // 更新现有障碍物位置
        this.updateObstaclePositions();
        
        // 移除超出屏幕的障碍物
        this.removeOffscreenObstacles();
    }
    
    /**
     * 生成障碍物
     */
    generateObstacle() {
        // 随机选择障碍物类型
        const type = this.obstacleTypes[Math.floor(Math.random() * this.obstacleTypes.length)];
        
        // 创建障碍物元素
        const obstacle = document.createElement('div');
        obstacle.className = `obstacle obstacle-${type}`;
        
        // 设置初始位置（屏幕右侧）
        const gameScene = document.getElementById('game-scene');
        if (gameScene) {
            obstacle.style.left = `${gameScene.offsetWidth}px`;
        } else {
            obstacle.style.left = '100%';
        }
        
        // 添加到容器
        if (this.obstaclesContainer) {
            this.obstaclesContainer.appendChild(obstacle);
            
            // 添加到障碍物列表
            this.obstacles.push({
                element: obstacle,
                type: type
            });
        }
    }
    
    /**
     * 更新障碍物位置
     */
    updateObstaclePositions() {
        // 根据打字速度计算移动速度
        const speed = 2 + (this.game.gameData.wpm / 20);
        
        // 更新每个障碍物的位置
        this.obstacles.forEach(obstacle => {
            const element = obstacle.element;
            const currentLeft = parseFloat(element.style.left) || 0;
            element.style.left = `${currentLeft - speed}px`;
        });
    }
    
    /**
     * 移除超出屏幕的障碍物
     */
    removeOffscreenObstacles() {
        this.obstacles = this.obstacles.filter(obstacle => {
            const element = obstacle.element;
            const left = parseFloat(element.style.left) || 0;
            
            if (left < -50) {
                // 移除DOM元素
                if (element.parentNode) {
                    element.parentNode.removeChild(element);
                }
                return false;
            }
            
            return true;
        });
    }
    
    /**
     * 清空所有障碍物
     */
    clearObstacles() {
        if (this.obstaclesContainer) {
            this.obstaclesContainer.innerHTML = '';
        }
        
        this.obstacles = [];
    }
} 